﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using estudent.Models;

namespace estudent.Controllers
{
    public class IzbirniPredmetnikController : Controller
    {
        estudentEnt db = null;

        IEnumerable<sPredmeti> prostoIzbPredmeti = null;
        IEnumerable<sPredmeti> strokovnoIzbPredmeti = null;
        IEnumerable<SModuli> moduli = null;
        IEnumerable<Vpisi> vpisiStudenta = null;

        Studenti student = null;

        public IzbirniPredmetnikController()
        {
            db = new estudentEnt();

            moduli = from m in db.SModulis
                     select m;

            prostoIzbPredmeti = from p in db.sPredmetis
                                where p.prostoIzbirni == true
                                select p;

            strokovnoIzbPredmeti = from s in db.sPredmetis
                                   where s.strokovnoIzbirni == true
                                   select s;

        }

        //
        // GET: /IzbirniPredmetnik/

        public ActionResult Index()
        {
            ViewData["moduli"] = moduli;
            ViewData["prosti"] = prostoIzbPredmeti;
            ViewData["strokovni"] = strokovnoIzbPredmeti;



            return View("IzbirniPredmetnik");
        }

        //
        // GET: /IzbirniPredmetnik/Izbira/id-studenta, ki je pa username
        public ActionResult Izbira(string id)
        {
            ViewData["moduli"] = moduli;
            ViewData["prosti"] = prostoIzbPredmeti;
            ViewData["strokovni"] = strokovnoIzbPredmeti;

            student = db.Studentis.First(s=>s.username == id);//nastavimo studenta, kateremo prirejamo

            vpisiStudenta = from v in db.Vpisis
                            where student.username == v.username
                            select v;

            ViewData["studLeta"] = vpisiStudenta;
            
            return View("IzbirniPredmetnik");

        }

        IEnumerable<sPredmeti> predmeti = null;//izbrani predmeti iz modulov in iz prosto in strokovno izbirnih

        [AcceptVerbs(HttpVerbs.Post)]
        public string dobiPredmeteOdModula(FormCollection form)
        {
            string mod=form["selectModuli"];
            
            try
            {
                SModuli modul = db.SModulis.First(m => m.imeModula == mod);
                predmeti = from p in db.sPredmetis
                           where p.sModula == modul.sModula
                           select p;
                
            }
            catch (Exception) { }

            string ret = "";
            if (predmeti != null)
            {
                foreach (var predmet in predmeti)
                    ret += predmet.imePredmeta + "<input type='hidden' name='"+predmet.sPredmeta.ToString()+"'><br/>";
            }
            return ret;
        }

        [AcceptVerbs(HttpVerbs.Post)]
        public string Shrani(FormCollection form)
        {
            string leto = form["studijskaLetaSelect"];
            DateTime l = new DateTime(Convert.ToInt32(leto),1,1);
            Vpisi izbranVpis = db.Vpisis.First(v=>v.letoVpisa.Year == l.Year);

            predmeti = from p in db.sPredmetis
                       select p;
            if (predmeti != null)
            {
                foreach (var p in predmeti)
                {
                    if(form[p.sPredmeta.ToString()]!=null){
                        if (!p.Vpisis.Contains(izbranVpis))
                        {
                            p.Vpisis.Add(izbranVpis);
                            izbranVpis.sPredmetis.Add(p);
                        }
                        else
                            return "Predmet "+p.imePredmeta+" iz modula je trenutnemu študentu že dodeljen. Preverite, če imate izbrana dva enaka modula.";
                    }
                }
            }

            foreach (var p in prostoIzbPredmeti)
            {
                if (form[p.imePredmeta] != null)
                {
                    if (!p.Vpisis.Contains(izbranVpis))
                    {
                        p.Vpisis.Add(izbranVpis);
                        izbranVpis.sPredmetis.Add(p);
                    }
                    else
                        return "Predmet " + p.imePredmeta + " je trenutnemu študentu že dodeljen.";
                }
            }

            foreach (var p in strokovnoIzbPredmeti)
            {
                if (form[p.imePredmeta] != null)
                {
                    if (!p.Vpisis.Contains(izbranVpis))
                    {
                        p.Vpisis.Add(izbranVpis);
                        izbranVpis.sPredmetis.Add(p);
                    }
                    else
                        return "Predmet " + p.imePredmeta + " je trenutnemu študentu že dodeljen.";
                }
            }
            try
            {
                db.SaveChanges();
            }
            catch (Exception e)
            {
                return "Napaka pri vnosu baze. Ima že izbrane izbirne predmete pod svoj vpis.";
            }

            return "Shranjeno.";
        }

    }
}
